// 导航辅助工具

/**
 * 安全的返回上一页
 * 如果没有上一页则跳转到指定页面
 */
export const safeNavigateBack = (fallbackUrl = '/pages/index/index') => {
  try {
    const pages = getCurrentPages()
    console.log('当前页面栈:', pages.length, pages.map(p => p.route))
    
    if (pages.length > 1) {
      // 有上一页，可以安全返回
      console.log('执行返回上一页')
      uni.navigateBack({
        success: () => {
          console.log('返回成功')
        },
        fail: (err) => {
          console.error('返回失败:', err)
          // 返回失败时跳转到fallback页面
          uni.reLaunch({
            url: fallbackUrl
          })
        }
      })
    } else {
      // 没有上一页，跳转到指定页面
      console.log('没有上一页，跳转到:', fallbackUrl)
      uni.reLaunch({
        url: fallbackUrl
      })
    }
  } catch (error) {
    console.error('导航检查失败:', error)
    // 出现异常时安全跳转
    uni.reLaunch({
      url: fallbackUrl
    })
  }
}

/**
 * 安全的页面跳转
 * 自动选择合适的跳转方式
 */
export const safeNavigateTo = (url, options = {}) => {
  const {
    mode = 'auto', // auto, navigate, redirect, reLaunch, switchTab
    checkTabBar = true
  } = options

  try {
    // 检查是否是tabBar页面
    const isTabBarPage = checkTabBar && isTabBarUrl(url)
    
    if (isTabBarPage) {
      console.log('跳转到tabBar页面:', url)
      uni.switchTab({
        url,
        success: () => console.log('switchTab成功'),
        fail: (err) => console.error('switchTab失败:', err)
      })
      return
    }

    // 根据模式选择跳转方式
    switch (mode) {
      case 'redirect':
        uni.redirectTo({ url })
        break
      case 'reLaunch':
        uni.reLaunch({ url })
        break
      case 'navigate':
        uni.navigateTo({ url })
        break
      case 'auto':
      default:
        // 自动判断：如果页面栈接近满了就用redirectTo，否则用navigateTo
        const pages = getCurrentPages()
        if (pages.length >= 8) { // 小程序页面栈限制通常是10层
          console.log('页面栈接近满载，使用redirectTo')
          uni.redirectTo({ url })
        } else {
          console.log('使用navigateTo')
          uni.navigateTo({ url })
        }
        break
    }
  } catch (error) {
    console.error('页面跳转失败:', error)
    // 失败时使用最安全的方式
    uni.reLaunch({ url })
  }
}

/**
 * 检查是否是tabBar页面
 */
const isTabBarUrl = (url) => {
  // 由于项目没有配置tabBar，所有页面都不是tabBar页面
  // 如果需要配置tabBar，请在pages.json中添加tabBar配置
  return false
}

/**
 * 获取页面栈信息（调试用）
 */
export const getPageStackInfo = () => {
  try {
    const pages = getCurrentPages()
    const info = {
      total: pages.length,
      current: pages[pages.length - 1]?.route,
      stack: pages.map((page, index) => ({
        index,
        route: page.route,
        options: page.options
      }))
    }
    
    console.log('页面栈信息:', info)
    return info
  } catch (error) {
    console.error('获取页面栈信息失败:', error)
    return null
  }
}

/**
 * 清理页面栈（保留首页）
 */
export const clearPageStack = (homeUrl = '/pages/index/index') => {
  try {
    console.log('清理页面栈，跳转到首页:', homeUrl)
    uni.reLaunch({
      url: homeUrl,
      success: () => {
        console.log('页面栈已清理')
      },
      fail: (err) => {
        console.error('清理页面栈失败:', err)
      }
    })
  } catch (error) {
    console.error('清理页面栈异常:', error)
  }
}

/**
 * 全局导航错误处理
 */
export const setupGlobalNavigationErrorHandler = () => {
  // 监听全局错误
  if (typeof uni !== 'undefined') {
    const originalNavigateBack = uni.navigateBack
    
    uni.navigateBack = (options = {}) => {
      const pages = getCurrentPages()
      if (pages.length <= 1) {
        console.warn('阻止在首页调用navigateBack，自动跳转到首页')
        uni.reLaunch({
          url: '/pages/index/index'
        })
        return
      }
      
      return originalNavigateBack.call(uni, {
        ...options,
        fail: (err) => {
          console.error('navigateBack失败，自动跳转到首页:', err)
          uni.reLaunch({
            url: '/pages/index/index'
          })
          if (options.fail) {
            options.fail(err)
          }
        }
      })
    }
  }
}

/**
 * 注册导航调试命令
 */
export const registerNavigationCommands = () => {
  if (typeof window !== 'undefined' && window.console) {
    console.log('=== 导航调试工具 ===')
    console.log('- window.pageStack() // 查看页面栈信息')
    console.log('- window.clearStack() // 清理页面栈')
    console.log('- window.safeBack() // 安全返回')
    
    window.pageStack = getPageStackInfo
    window.clearStack = clearPageStack
    window.safeBack = () => safeNavigateBack()
    
    // 自动显示当前页面栈信息
    getPageStackInfo()
    
    // 设置全局导航错误处理
    setupGlobalNavigationErrorHandler()
  }
} 